package com.stack;

/**
 * 作者：swk 栈
 * 时间：
 * 公司：
 **/
public class ArrayStackDemo {
    public static void main(String[] args) {
        ArrayStack stack = new ArrayStack(10);
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
        stack.push(6);
        stack.push(7);
        stack.push(8);
        stack.push(9);
        stack.showList();
        System.out.println("------------------------------------------");
        System.out.println("---pop的数据："+stack.pop());
        System.out.println("---pop的数据："+stack.pop());
        System.out.println("---pop的数据："+stack.pop());
        System.out.println("---pop的数据："+stack.pop());
        stack.showList();

    }
}

//定义一个ArrayStack 表示栈
class ArrayStack {
    private int maxSize;// 栈的大小
    private int[] stack;// 数组，数组模拟栈，数据就放在该数组
    private int top = -1;// top表示栈顶，初始化为-1

    //构造器
    public ArrayStack(int maxSize) {
        this.maxSize = maxSize;
        stack = new int[this.maxSize];
    }

    //栈满
    public boolean isFull() {
        return top == this.maxSize;
    }

    //栈空
    public boolean isEmpty() {
        return top == -1;
    }

    //入栈
    public void push(int value) {
        //先判断栈是否满了
        if (isFull()) {
            System.out.println("该栈已满，无法存放数据了");
            return;
        }
        top++;
        stack[top] = value;
    }

    //出栈
    public int pop() {
        if (isEmpty()) {
            System.out.println("该栈已经空了，没有数据了");
            return 0;
        }
        return stack[top--];
    }

    //遍历栈
    public void showList() {
        if (isEmpty()) {
            System.out.println("该栈已经空了，没有数据了");
            return;
        }
        for (int i = top; i >= 0; i--) {
            System.out.printf("栈的数据如下：stack[%d]=%d\n", i, stack[i]);
        }
    }
}
